package com.expert.miniapp.dto;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import com.fasterxml.jackson.annotation.JsonInclude;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * CaseDTO - 案例数据传输对象
 * 包含案例基本信息、关联的用户信息和资源信息
 *
 * @author System
 * @since 2025-10-19
 */
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class CaseDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 案例ID
     */
    private String caseId;

    /**
     * 推荐项ID（关联recommendation_item表）
     */
    private String itemId;

    /**
     * 案例序号（自增，用于显示案例总数和排序）
     */
    private Integer num;

    /**
     * 需求摘要（从demand表关联获取）
     */
    private String demandSummary;

    /**
     * 创建时间
     */
    private LocalDateTime createdAt;

    /**
     * 需求ID（关联demand表）
     */
    private String demandId;

    /**
     * 用户ID（关联user表）
     */
    private String userId;

    /**
     * 资源类型
     */
    private String resourceType;

    /**
     * 资源ID
     */
    private String resourceId;

    /**
     * 关联的用户信息
     */
    private UserInfo user;

    /**
     * 关联的资源信息
     */
    private ResourceInfo resource;

    /**
     * 用户信息内部类
     */
    @Getter
    @Setter
    @NoArgsConstructor
    @AllArgsConstructor
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class UserInfo implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 用户ID
         */
        private String userId;

        /**
         * 用户昵称
         */
        private String nickname;

        /**
         * 用户头像URL
         */
        private String avatarUrl;
    }

    /**
     * 资源信息内部类
     */
    @Getter
    @Setter
    @NoArgsConstructor
    @AllArgsConstructor
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class ResourceInfo implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 资源类型 (expert/achievement/instrument/laboratory/other_resource)
         */
        private String resourceType;

        /**
         * 资源ID
         */
        private String resourceId;

        /**
         * 资源名称
         */
        private String name;

        /**
         * 资源图片URL
         */
        private String imageUrl;

        /**
         * 资源标签
         */
        private String tags;

        /**
         * 所属组织/机构
         */
        private String organization;

        /**
         * 所在城市
         */
        private String city;

        /**
         * 资源内容概述
         */
        private String summary;
    }
}
